package com.taoyusen.common.base;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;

public interface IBaseDAO<T,ID extends Serializable>
{

	/**
	 * 新增传入的实例对象
	 * @param object
	 * @return boolean true：新增成功 false：新增失败
	 */
	public boolean  sava(T object);
	
	/**
	 * 删除传入的实例对象
	 * @param object
	 * @return boolean true：删除成功 false：删除失败
	 */
	public boolean  delete(T object);
	
	
	/**
	 * 修改传入的实例对象
	 * @param object
	 * @return boolean true：修改成功 false：修改失败
	 */
	public boolean  update(T object);
	
	
	/**
	 * 根据ID查询对映实例
	 * @param id
	 * @return 实例对象
	 */
	public T getObjectById(ID id);
	
	
	/**
	 * 查询所有实例
	 * @return List<POJO>
	 */
	public List<T> getAllObject();
	
	
	/**
	 * 利用hibernate回调函数,根据ids删除多个实例
	 * @param ids
	 * @return boolean true：删除成功 false：删除失败
	 */
	public boolean  deleteByIds(final ID[] ids);
	
	
	/**
	 * 利用hibernate回调函数写的执行查询HQL的函数
	 * @param hql
	 * @return
	 */
	public Query createQuery(final String hql);
	
	
	/**
	 * 利用hibernate回调函数写的执行查询原生SQL的函数
	 * @param sql
	 * @return POJO
	 */
	public SQLQuery createSQLQueryByEntity(final String sql);
	
	/**
	 * 利用hibernate回调函数写的执行查询原生SQL的函数
	 * @param sql
	 * @return List<Object>
	 */
	public List executeSqlQuery(String sql);
}
